package com.lion.appletrip;

import java.text.SimpleDateFormat;

import com.lion.appletrip.utils.AccessTokenKeeper;
import com.lion.appletrip.utils.Constants;
import com.lion.appletrip.utils.PreferenceUtils;
import com.sina.weibo.sdk.auth.AuthInfo;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
import com.sina.weibo.sdk.auth.WeiboAuthListener;
import com.sina.weibo.sdk.auth.sso.SsoHandler;
import com.sina.weibo.sdk.exception.WeiboException;





import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class LoginActivity extends Activity
{
	private AuthInfo mAuthInfo;
	/** 注意：SsoHandler 仅当 SDK 支持 SSO 时有效 */
	private SsoHandler mSsoHandler;
	/** 封装了 "access_token"，"expires_in"，"refresh_token"，并提供了他们的管理功能 */
	private Oauth2AccessToken mAccessToken;
	private View sina;
	private int numAt;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_login);
		// 初始化
		Intent intent = getIntent();
		numAt = intent.getIntExtra("Num", -1);
		mAuthInfo = new AuthInfo(this, Constants.APP_KEY,Constants.REDIRECT_URL, Constants.SCOPE);
		mSsoHandler = new SsoHandler(LoginActivity.this, mAuthInfo);
		sina = findViewById(R.id.iv_sina);
		sina.setOnClickListener(new OnClickListener()
		{

			@Override
			public void onClick(View v)
			{
				mSsoHandler.authorize(new AuthListener());

			}
		});
		findViewById(R.id.iv_btn_close_login).setOnClickListener(new OnClickListener()
		{
			
			@Override
			public void onClick(View v)
			{
					finish();
			}
		});
		findViewById(R.id.btn_regist_login).setOnClickListener(new OnClickListener()
		{
			
			@Override
			public void onClick(View v)
			{
				Intent intent = new Intent();
				intent.setClass(LoginActivity.this, RegistActivity.class);
				intent.putExtra("num", numAt);
				startActivity(intent);
			}
		});
		findViewById(R.id.btn_login_login).setOnClickListener(new OnClickListener()
		{
			
			@Override
			public void onClick(View v)
			{
				Intent intent = new Intent();
				intent.setClass(LoginActivity.this, LoginLognActivity.class);
				intent.putExtra("num", numAt);
				intent.putExtra("account", "手机号码");
				startActivity(intent);
				
			}
		});
		findViewById(R.id.btn_login_login2).setOnClickListener(new OnClickListener()
		{
			
			@Override
			public void onClick(View v)
			{
				Intent intent = new Intent();
				intent.setClass(LoginActivity.this, LoginLognActivity.class);
				intent.putExtra("num", numAt);
				intent.putExtra("account", "用户名/邮箱");
				startActivity(intent);
				
			}
		});
	}

	/**
	 * 微博认证授权回调类。 1. SSO 授权时，需要在 {@link #onActivityResult} 中调用
	 * {@link SsoHandler#authorizeCallBack} 后， 该回调才会被执行。 2. 非 SSO
	 * 授权时，当授权结束后，该回调就会被执行。 当授权成功后，请保存该 access_token、expires_in、uid 等信息到
	 * SharedPreferences 中。
	 */
	class AuthListener implements WeiboAuthListener
	{

		@Override
		public void onComplete(Bundle values)
		{
			// 从 Bundle 中解析 Token
			mAccessToken = Oauth2AccessToken.parseAccessToken(values);
			// 从这里获取用户输入的 电话号码信息
			String phoneNum = mAccessToken.getPhoneNum();
			if (mAccessToken.isSessionValid())
			{
				// 显示 Token
				updateTokenView(false);
				// 保存 Token 到 SharedPreferences
				AccessTokenKeeper.writeAccessToken(LoginActivity.this,
				        mAccessToken);
				Toast.makeText(LoginActivity.this,
				        R.string.weibosdk_demo_toast_auth_success,
				        Toast.LENGTH_SHORT).show();
				if (mAccessToken != null && mAccessToken.isSessionValid())
				{
					// 获取当前已保存过的 Token
					mAccessToken = AccessTokenKeeper
					        .readAccessToken(LoginActivity.this);
					sina.postDelayed(new Runnable()
					{

						@Override
						public void run()
						{
							// 已经获取数据，跳转回Fragment
							PreferenceUtils.setLogin(LoginActivity.this, true);
							Intent intent = new Intent();
							intent.putExtra("Login", numAt);
							intent.setClass(LoginActivity.this,
							        MainActivity.class);
							startActivity(intent);
							finish();

						}
					}, 1000);

				} else
				{
					Toast.makeText(LoginActivity.this, "空", Toast.LENGTH_LONG)
					        .show();
				}

			} else
			{
				// 以下几种情况，您会收到 Code：
				// 1. 当您未在平台上注册的应用程序的包名与签名时；
				// 2. 当您注册的应用程序包名与签名不正确时；
				// 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
				String code = values.getString("code");
				String message = getString(R.string.weibosdk_demo_toast_auth_failed);
				if (!TextUtils.isEmpty(code))
				{
					message = message + "\nObtained the code: " + code;
				}
				Toast.makeText(LoginActivity.this, message, Toast.LENGTH_LONG)
				        .show();
			}
		}

		public void onCancel()
		{
			Toast.makeText(LoginActivity.this,
			        R.string.weibosdk_demo_toast_auth_canceled,
			        Toast.LENGTH_LONG).show();
		}

		public void onWeiboException(WeiboException e)
		{
			Toast.makeText(LoginActivity.this,
			        "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
			        .show();
		}
	}

	/**
	 * 显示当前 Token 信息。
	 * 
	 * @param hasExisted
	 *            配置文件中是否已存在 token 信息并且合法
	 */
	private void updateTokenView(boolean hasExisted)
	{
		String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
		        .format(new java.util.Date(mAccessToken.getExpiresTime()));
		String format = getString(R.string.weibosdk_demo_token_to_string_format_1);
		String message = String.format(format, mAccessToken.getToken(), date);
		if (hasExisted)
		{
			message = getString(R.string.weibosdk_demo_token_has_existed)
			        + "\n" + message;
		}
	}

	/**
	 * 当 SSO 授权 Activity 退出时，该函数被调用。
	 * 
	 * @see {@link Activity#onActivityResult}
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		super.onActivityResult(requestCode, resultCode, data);

		// SSO 授权回调
		// 重要：发起 SSO 登陆的 Activity 必须重写 onActivityResults
		if (mSsoHandler != null)
		{
			mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
		}

	}
}
